/**
 * 档案下载工具函数
 * 统一处理档案文件下载逻辑
 */

/**
 * 下载档案文件
 * @param {Object} archive 档案对象
 * @param {Function} messageSuccess 成功消息函数
 * @param {Function} messageError 错误消息函数
 * @param {Function} messageWarning 警告消息函数
 */
export function downloadArchive(archive, messageSuccess, messageError, messageWarning) {
  if (!archive.filePath) {
    messageWarning('该档案没有关联的文件');
    return;
  }

  // 创建下载链接
  const downloadUrl = `/company/archive/download/${archive.archiveId}`;
  
  // 获取token
  const token = localStorage.getItem('token');
  
  if (!token) {
    messageError('请先登录');
    return;
  }

  // 通过fetch下载文件
  fetch(downloadUrl, {
    method: 'GET',
    headers: {
      'token': token
    }
  })
  .then(response => {
    if (response.ok) {
      // 获取文件名
      const contentDisposition = response.headers.get('Content-Disposition');
      let filename = archive.title; // 默认使用档案标题
      
      if (contentDisposition) {
        // 从Content-Disposition头中提取文件名
        const filenameMatch = contentDisposition.match(/filename\*=UTF-8''(.+)/);
        if (filenameMatch) {
          filename = decodeURIComponent(filenameMatch[1]);
        } else {
          // 兼容旧格式
          const filenameMatch2 = contentDisposition.match(/filename="(.+)"/);
          if (filenameMatch2) {
            filename = filenameMatch2[1];
          }
        }
      }
      
      return response.blob().then(blob => ({ blob, filename }));
    } else if (response.status === 401) {
      throw new Error('请先登录');
    } else if (response.status === 403) {
      throw new Error('您没有权限下载此档案');
    } else if (response.status === 404) {
      throw new Error('档案文件不存在');
    } else {
      throw new Error('下载失败');
    }
  })
  .then(({ blob, filename }) => {
    // 创建下载链接
    const url = window.URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.style.display = 'none';
    link.href = url;
    link.download = filename;
    
    // 触发下载
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    window.URL.revokeObjectURL(url);
    
    messageSuccess('下载成功');
  })
  .catch(error => {
    console.error('下载失败:', error);
    messageError(error.message || '下载失败');
  });
} 